﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace HelpDesk
{
    public partial class AdminProblema : System.Web.UI.Page
    {
        QueryBuilder Consulta = new QueryBuilder();

        // variable que nos permite saber que operacion dentro de los problemas se va a trabajar
        string operacion;

        protected void Page_Load(object sender, EventArgs e)
        {
            operacion = Request.QueryString["op"]; //se captura el parametro, si es Crear, Modificar, Eliminar problema

            switch (operacion)
            {
                case ("crear"):
                    btnGuardar.Text = "Guardar";
                    lblIdProblema.Visible = true;
                    Label1.Visible = false;
                    Lista_IdProblema.Visible = false;
                    txtDescripcion.Text = "";
                    txtDescripcion.Visible = false;
                    TextBox1.Visible = true;
                    Label5.Visible = false;
                    Label6.Text = "Crear Problema";
                    Infraestructuras_Existentes();

                    //se mandan a traer el ultimo id de problema para generar el nuevo
                    string sql2 = "select max(ID_PROBLEMA) from PROBLEMA";

                    DataTable datos2 = Consulta.EjecutarQuery(sql2);
                    int nuevo_id = Convert.ToInt16(datos2.Rows[0].ItemArray[0]) + 1;
                    lblIdProblema.Text = nuevo_id.ToString();
                    
                    break;

                case ("modificar"): 
                    btnGuardar.Text = "Guardar";
                    btnBorrar.Text = "Cancelar";
                    txtDescripcion.Visible = true;
                    TextBox1.Visible = false;
                    Label5.Visible = false;
                    Label6.Text = "Modificar Problema";
                    Inicializar_datos_modificar_eliminar();
                    break;

                case ("eliminar"):
                    btnGuardar.Text = "Eliminar";
                    btnBorrar.Text = "Cancelar";
                    txtDescripcion.Visible = true;
                    TextBox1.Visible = false;
                    Label5.Visible = false;
                    Label6.Text = "Eliminar Problema";
                    Inicializar_datos_modificar_eliminar();
                    break;
            }
        }

        protected void Inicializar_datos_modificar_eliminar()
        {
            txtDescripcion.Visible = false;
            Label2.Visible = false;
            Label1.Visible = false;
            Lista_IdProblema.Visible = false;
            lblIdProblema.Visible = false;
            Label4.Visible = false;
            btnGuardar.Visible = false;
            TextBox1.Visible = false;

            Boton_Infraestructura.Visible = true;
            Boton_Problema.Visible = false;

            Infraestructuras_Existentes();
        }

        //se mandan a traer todas las infraestructuras que existan y se llena la Lista_Infraestructuras
        protected void Infraestructuras_Existentes()
        {
            //se mandan a traer todas las infraestructuras que existan y se llena la Lista_Infraestructuras
            string sql = "select DESCRIPCION from INFRAESTRUCTURA";

            DataTable datos1 = Consulta.EjecutarQuery(sql);
            for (int i = 0; i < datos1.Rows.Count; i++)
            {
                Lista_Infraestructuras.Items.Add(datos1.Rows[i].ItemArray[0].ToString());
            }
        }

        protected void btnGuardar_Click1(object sender, EventArgs e)
        {
            string Descripcion = "";
            string Infraestructura = "";

            switch (operacion)
            {
                case ("crear"):
                    string gato = TextBox1.Text;
                    
                    Lista_IdProblema.Visible = false;

                    Infraestructura = Lista_Infraestructuras.SelectedItem.Text;
                    Descripcion = gato;
                    ValidarDato objvalidasql = new ValidarDato();
                    bool esSQLInjection = objvalidasql.esCadenaConSQL(Descripcion);
                    bool esAlfanumerico = objvalidasql.esAlfanumerico(Descripcion);
                    QueryBuilder objBusca = new QueryBuilder();
                    //se manda a traer el Id de la infraestructura seleccionada
                    string sql = "select ID_INFRAESTRUCTURA from INFRAESTRUCTURA where descripcion =" + "'" + Infraestructura + "'";
                    DataTable datos2 = Consulta.EjecutarQuery(sql);
                    int id_infraestructura = Convert.ToInt16(datos2.Rows[0].ItemArray[0]);

                    DataTable tbResultadoConsulta = new DataTable();
                    //se inserta en la tabla Problema el nuevo problema
                    string sql2 = "insert into PROBLEMA (ID_PROBLEMA,DESCRIPCION,INFRAESTRUCTURA) values (PROBLEMA_SEQ.NEXTVAL," + "'" + Descripcion + "'" + "," + id_infraestructura + ")";
                    string sqlbusca="SELECT DESCRIPCION FROM PROBLEMA";
                    if (esAlfanumerico == true)
                    {
                        if (esSQLInjection == false)
                        {
                            tbResultadoConsulta = objBusca.EjecutarQuery(sqlbusca);
                            bool seRealizaSQL = true;
                            for (int i = 0; i < tbResultadoConsulta.Rows.Count; i++)
                            {
                                if (string.Compare(tbResultadoConsulta.Rows[i].ItemArray[0].ToString(), Descripcion) == 0)
                                {
                                    seRealizaSQL = false;
                                    break;
                                }
                            }

                            if (seRealizaSQL == true) //si todo es valido, se ejecuta la query
                            {
                                Consulta.EjecutarNoQuery(sql2);
                                Response.Write("<script language=javascript>alert('Problema ingresado exitosamente!!');</script>");
                            }
                            else{Response.Write("<script language=javascript>alert('Problema ya existe, ingrese otro diferente');</script>");}
                        }
                        else { Response.Write("<script language=javascript>alert('Caracteres Invalidos');</script>"); }
                    }
                    else { Response.Write("<script language=javascript>alert('No se permite el ingreso de caracteres no alfanumericos y cadenas vacias');</script>");}

                    // mensaje de que se creo exitosamente el nuevo 
                    //Response.Write("<script language=javascript>alert('Problema ingresado exitosamente!!');</script>");
                    TextBox1.Text = "";
                    Lista_Infraestructuras.Items.Clear();
                    Page_Load(null, null);
                    
                    break;

                case ("modificar"):
                    Infraestructura = Lista_Infraestructuras.SelectedItem.Text.ToString();

                    //se va a modificar la descripcion del problema segun el id del problema y la infraestructura seleccionado
                    Descripcion = txtDescripcion.Text.ToString();
                    string sql3 = "update PROBLEMA set DESCRIPCION ='" + Descripcion + "'" + "where ID_PROBLEMA=" + Convert.ToInt16(Lista_IdProblema.SelectedItem.Text);
                    Consulta.EjecutarNoQuery(sql3);

                    // mensaje de que se modifico exitosamente el problema existente 
                    Response.Write("<script language=javascript>alert('Problema modificado exitosamente!!');</script>");

                    Lista_Infraestructuras.Items.Clear();
                    Page_Load(null, null);
                                
                    break;

                case ("eliminar"):
                    Infraestructura = Lista_Infraestructuras.SelectedItem.Text.ToString();

                    //se va a eliminar el problema segun el id del problema y la infraestructura seleccionado
                    Descripcion = txtDescripcion.Text.ToString();
                    string sql4 = "delete from PROBLEMA where ID_PROBLEMA=" + Convert.ToInt16(Lista_IdProblema.SelectedItem.Text);
                    Consulta.EjecutarNoQuery(sql4);

                    // mensaje de que se elimino exitosamente el problema 
                    Response.Write("<script language=javascript>alert('Problema eliminado exitosamente!!');</script>");

                    Lista_Infraestructuras.Items.Clear();
                    Page_Load(null, null);

                    break;
            }
        }

        protected void Lista_Infraestructuras_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void Lista_Infraestructuras_TextChanged(object sender, EventArgs e)
        {           
        }

        protected void Lista_IdProblema_SelectedIndexChanged(object sender, EventArgs e)
        {       
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Label2.Visible = false;
            txtDescripcion.Visible = true;
            Label5.Visible = true;

            //se manda a traer la descripcion del problema seleccionado
            string sql4 = "select DESCRIPCION from PROBLEMA where ID_PROBLEMA =" + Convert.ToInt16(Lista_IdProblema.SelectedItem.Text);
            DataTable datos5 = Consulta.EjecutarQuery(sql4);
            string descipcion = Convert.ToString(datos5.Rows[0].ItemArray[0]);
            txtDescripcion.Text = descipcion;

            if (operacion == "eliminar")
            {
                txtDescripcion.Enabled = false;
            }

            btnGuardar.Visible = true;
            Lista_IdProblema.Visible = true;
            Label1.Visible = true;
            Boton_Problema.Visible = true;
        }

        protected void Boton_Infraestructura_Click(object sender, EventArgs e)
        {
            Lista_IdProblema.Visible = true;
            Lista_IdProblema.Items.Clear();
            Label1.Visible = true;
                   
            string Infraestructura = "";
            Infraestructura = Lista_Infraestructuras.SelectedItem.Text;
            //se manda a traer el Id de la infraestructura seleccionada
            string sql = "select ID_INFRAESTRUCTURA from INFRAESTRUCTURA where descripcion =" + "'" + Infraestructura + "'";
            DataTable datos3 = Consulta.EjecutarQuery(sql);
            int id_infraestructura = Convert.ToInt16(datos3.Rows[0].ItemArray[0]);

            Boton_Problema.Visible = true;
           
            //se manda a traer los ids de los problemas que existan con la condicion de la infraestructura seleccioanda
            string sql3 = "select ID_PROBLEMA from PROBLEMA where infraestructura =" + id_infraestructura;
            DataTable datos4 = Consulta.EjecutarQuery(sql3);
            for (int i = 0; i < datos4.Rows.Count; i++)
            {
                Lista_IdProblema.Items.Add(datos4.Rows[i].ItemArray[0].ToString());
            }
        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            Lista_Infraestructuras.Items.Clear();
            txtDescripcion.Text = "";
            TextBox1.Text = "";
            Page_Load(null, null);
        }
    }
}
